# encoding:utf-8
import json
import random
import re
import sys
import time
import pandas as pd
import requests
from tqdm import tqdm
from utils.resolove import *
from utils.crawlfundinfo import *
from utils.crawlposition import *
from utils.crawlfund import *
from utils.guba import *
from utils.manager import *
from fake_useragent import UserAgent
from analyze import *
from wordcloud import *
from emotion import *
import argparse
import warnings

warnings.filterwarnings("ignore") 
parser = argparse.ArgumentParser()
ua = UserAgent()
# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)

def fundinfomation(fund_type):
    # 获取每个类型中的基金
    url = 'https://fundapi.eastmoney.com/fundtradenew.aspx'
    page_index = 1
    max_page = 2
    # 分别对应偏股基金：pg、股票基金：gp、混合基金：hh、债券基金：zq、指数基金：zs
    #fund_type = 'gp'
    # 得到详细的月、年收益情况
    df_rank_data = get_rank_data(url, page_index, max_page, fund_type)
    # 得到Top的基金权重
    max_rank = 500 if int(len(df_rank_data)/100) > 3 else 100
    # 获取基金详细信息和持仓情况
    df_rank_detail_data = get_fundinfo_data(df_rank_data, max_rank)
    df_position_data = get_position_data(df_rank_data, max_rank)
    # 合并收益数据和详情数据
    df_rank_data = df_rank_data.merge(df_rank_detail_data, on='基金代码', how="outer",)
    df_rank_data = df_rank_data.fillna('--')
    """保存数据"""
    df_rank_data.to_csv(r'file/' + fund_type + '_型最新季度基金收益详情.csv', encoding='gbk', index=False)
    df_position_data.to_csv(r'file/' + fund_type + '_型基金近一年前' + str(max_rank) + '最新季度前十大持仓.csv', encoding='gbk', index=False)
    print(fund_type+"型基金详细信息及持仓数据文件保存在file目录下")

def comment(fund_code):
    comment_max_page  = 100 #最大爬取页面
    #fund_code = input("请输入要爬取评论的基金代码:")
    data_raw = crawl_comments(fund_code,comment_max_page) #爬取评论
    #print(data_raw)
    data_raw.to_excel(r'file/基金' + fund_code + '的前100页评论.xlsx', encoding='gbk', index=False) 
    print(fund_code+'基金的前100页评论保存在file目录下')

def fmanager():
    fund_manager_df = manager() #爬取基金经理档案
    fund_manager_df.to_csv(r'file/基金经理档案.csv', encoding='gbk', index=False)
    print('基金经理档案保存在file目录下')

def fanalyze(df_1,df_2,ftype,fund_manager_df):
    roedistribution(df_1,ftype) #收益分布
    roetop10(df_1,ftype) #收益前10
    fumanager(df_1,ftype) #基金经理
    roeestablished1(df_1,ftype) #收益与成立时间
    roeestablished2(df_1,ftype) #收益与成立时间
    scaledistribution(df_1,ftype) #规模分布
    roescaledistribution(df_1,ftype) #收益与规模关系
    position(df_1,df_2,ftype) #基金持仓
    fumanager_scaledistribution_roe(fund_manager_df) #经理规模收益率关系
    if ftype in g:
        print(g[ftype]+"型数据分析完成,保存在file目录下")
def wordcl(facode):
    wordc(facode)
    print("基金"+facode+"词图生成完成,文件保存在file目录下")

def femotion(fccode):
    emt(fccode)
    print("基金"+fccode+"的基民情绪与大盘走势关系生成完成,文件保存在file目录下")

if __name__ == '__main__':
    print('''
 _              _      _____                _ 
| |    ___  ___| | __ |  ___|   _ _ __   __| |
| |   / _ \/ _ \ |/ / | |_ | | | | '_ \ / _` |
| |__|  __/  __/   <  |  _|| |_| | | | | (_| |
|_____\___|\___|_|\_\ |_|   \__,_|_| |_|\__,_|
                                    By Exp1ore             
                                                              
       ''' )
    print("Useage: python3 main.py --help")
    parser.add_argument('-t','--type', type=str, required=False, help="爬取对应基金类型的详细信息及最新季度持仓,偏股基金：pg、股票基金：gp、混合基金：hh、债券基金：zq、指数基金：zs")
    parser.add_argument('-c','--comments', type=str, required=False, help="爬取对应基金代码评论")
    parser.add_argument('-m','--manager',action='store_true', help="爬取基金经理档案")
    parser.add_argument('-a','--analyze', type=str, required=False, help="多维度基金数据分析")
    parser.add_argument('-w','--wordcloud', type=str, required=False, help="基民评论词图生成")
    parser.add_argument('-e','--emotion', type=str, required=False, help="基民情绪指数与大盘关系")
    args = parser.parse_args()
    g = {'gp':"股票","pg":"偏股","hh":"混合","zs":"指数","zq":"债券"}
    fundtype = args.type
    fundcomments = args.comments
    ftype = args.analyze
    wcode = args.wordcloud
    fecode = args.emotion
    if fundtype:
        fundinfomation(fundtype)
    if fundcomments:
        comment(fundcomments)
    if args.manager:
        fmanager()
    if ftype:
        try:
            df_1 = pd.read_csv("./file/"+ftype+"_型最新季度基金收益详情.csv", encoding="gbk")
            df_2 = pd.read_csv("./file/"+ftype+"_型基金近一年前500最新季度前十大持仓.csv", encoding="gbk")
            fund_manager_df = pd.read_csv("./file/基金经理档案.csv",encoding="gbk")
        except:
             print("您还未爬取相关信息!")
        fanalyze(df_1,df_2,ftype,fund_manager_df)
    if wcode:
        try:
            wordcl(wcode)
        except:
            print("您还未爬取相关信息!")
    if fecode:
        try:
            femotion(fecode)
        except:
            print("您还未爬取相关信息!")

       